import axios from 'axios';
import router from '@/router'
import {Message, MessageBox} from 'element-ui'
import store from '../store'
import {getToken,setToken} from '@/utils/auth'
import constant from '@/utils/constant'
import {getErrSource} from '@/api/underwriting/uw'

// 创建axios实例
let service = axios.create({
  baseURL: process.env.BASE_API, // api的base_url
  timeout: 60000 // 请求超时时间
});
// request拦截器
service.interceptors.request.use(config => {
  // if (getToken(constant.TOKEN)) {
  //   config.headers = {
  //     'Authorization': getToken(constant.TOKEN), //携带权限参数
  //   };
  // }

  if(config.url.indexOf('login/login') == -1){
    config.headers = {
      'Authorization': getToken(constant.TOKEN) || '', //携带权限参数
      'Cache-Control': 'no-cache',//不使用缓存
        'Pragma' : 'no-cache'
    };
  }
  return config;
}, error => {
  Promise.reject(error)
})

// respone拦截器
service.interceptors.response.use(
  response => {
//  console.log("response拦截器：", response);
    /**
     * resultCode:0,接口正常返回;
     */
    //下载文件直接返回
    if (response.config.responseType == 'blob'){
        return response;
    }
    const res = response.data;
    // debugger
    if (res.resultCode !== 0) {
      store.dispatch('loading/CHANGE_LOADING', false);
      Message.closeAll(); // 每次关闭当前错误 保证页面只有一个错误提示！
      if(response.config.url.indexOf('login/login') == -1 && response.config.url.indexOf('securitylog/record') == -1){
      	Message({
	        message: res.resultMsg||res.message||'系统异常',
	        type: 'error',
	        duration: 15000,
	        showClose: true,
	      });
      }
      
      // 根据服务端约定的状态码：40101:登录失效;
      if (res.resultCode === 40101) {
        store.dispatch('LogOut', {});
        MessageBox.confirm('您登录已失效，可以取消继续留在该页面，或者重新登录', '确定登出', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          window.sessionStorage.setItem('tagActive','') // 退出系统则页签清空
          // location.reload();// 为了重新实例化vue-router对象 避免bug
          window.location.href= constant.loginUrl;//'http://128.232.11.204:30024/IPAS/index'
          // let loginUrl =  window.location.protocol + window.location.host;
          // let url = loginUrl + '/IPAS/index/login';
          // console.log(url)
          // window.location.href= loginUrl + '/IPAS/index/login'; // 当前域名下 工作台登录
          // window.open(url)
        });
      } else {
        return res;
      }
      // return Promise.reject('error');
    } else { // res.resultCode === 200,正常返回数据
//       const token = getToken(constant.TOKEN);
//       const res = getToken(token);// 根据token拉取用户信息
//       setToken(constant.TOKEN,token,1/12);
//       setToken(token,res,1/12);
      return response.data;
    }
  },
  error => {
    // debugger
    let appName = '';
    let url = error.config.url;
    if(url.indexOf('/ilmp/')>-1){
      let start = url.substring(6,url.length);
      let end = start.substring(0,start.indexOf('/'));
      appName = end;
    }else{
      if(url.indexOf('CITICGIS')>-1){
        appName = 'CITICGIS';
      }
    }
    console.log(appName);
    if(error.message.indexOf('timeout')>-1){
//      Message({
//        message: '请求超时',
//        type: 'error',
//        duration: 5 * 1000
//      });
        return Promise.reject(error);
    };
    if(error.message=='Request failed with status code 401'){
        console.log(1)
        store.dispatch('LogOut', {});
        MessageBox.confirm('您登录已失效，可以取消继续留在该页面，或者重新登录', '确定登出', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          // location.reload();// 为了重新实例化vue-router对象 避免bug
          window.sessionStorage.setItem('tagActive','') // 退出系统则页签清空
          // let loginUrl =  window.location.protocol + window.location.host;
          // let url = loginUrl + '/IPAS/index/login';
          // window.location.href= loginUrl + '/IPAS/index/login'; // 当前域名下 工作台登录
          // window.open(url)
          // router.push({path:'/login'})
          window.location.href=constant.loginUrl;//'http://128.232.11.204:30024/IPAS/index'
          
        });
        return Promise.reject(error);
    };
    console.log(2)
    Message.closeAll();
    let message = '';
    if(error.message){
      message = "连接服务器【"+appName+"】或者数据库异常,请求路径:【"+url+"】："+error.message
    }

    let errSource = getErrSource(url);
    if(errSource!=""){
      message= errSource+": 连接服务器或者数据库异常,请求路径:【"+url+"】"
    }

    Message({
      message: message||'网络异常',
      type: 'error',
      duration: 15000,
      showClose: true,
    });

    // MessageBox.alert({
    //   title:'提示',
    //   message: message||'网络异常',
    //   type: 'error'
    // })
    return Promise.reject(error);
  }
)

export default service;
